// 示例 1:
// 输入: s = "abcabcbb"
// 输出: 3
// 解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
// 示例 2:
// 输入: s = "bbbbb"
// 输出: 1
// 解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
// 示例 3:
// 输入: s = "pwwkew"
// 输出: 3
// 解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
// 请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。

let s = "pwwkew"

var lengthOfLongestSubstring = function (s) {
    // let len = s.length
    // let str = ''
    // let count = 0
    // let maxlen = 0
    // for (let i = count; i < len; i++) {
    //     for (j = 0; j < str.length; j++) {
    //         if (str[j] === s[i]) {
    //             if (str.length > maxlen) {
    //                 maxlen = str.length
    //             }
    //             str = ''
    //             ++count
    //             console.log(count);
    //             i = count
    //             break
    //         }
    //     }
    //     if (j === str.length) {
    //         str += s[i]
    //         console.log(str);
    //     }
    // }
    // return maxlen

    let len = s.length;
    let str = ''; // 存储当前无重复字符的子串
    let maxlen = 0;

    for (let i = 0; i < len; i++) {
        let index = str.indexOf(s[i]);

        // 如果当前字符已经在子串中，去除前面的重复字符
        if (index !== -1) {
            str = str.slice(index + 1); // 保留重复字符之后的部分
        }

        str += s[i]; // 加入当前字符
        maxlen = Math.max(maxlen, str.length); // 更新最长子串的长度
    }

    return maxlen;
};
console.log(lengthOfLongestSubstring(s));
